/**
 * 用户相关类型定义
 */

/**
 * 用户基本信息
 */
export interface UserInfo {
  /**
   * 用户ID
   */
  id: string | number
  
  /**
   * 用户名
   */
  username: string
  
  /**
   * 昵称
   */
  nickname: string
  
  /**
   * 真实姓名
   */
  realName?: string
  
  /**
   * 头像
   */
  avatar: string
  
  /**
   * 性别：0-未知，1-男，2-女
   */
  gender?: 0 | 1 | 2
  
  /**
   * 邮箱
   */
  email?: string
  
  /**
   * 手机号
   */
  phone?: string
  
  /**
   * 生日
   */
  birthday?: string
  
  /**
   * 个人简介
   */
  bio?: string
  
  /**
   * 所在地区
   */
  location?: string
  
  /**
   * 注册时间
   */
  registerTime?: string
  
  /**
   * 最后登录时间
   */
  lastLoginTime?: string
  
  /**
   * 状态：0-禁用，1-启用
   */
  status: 0 | 1
  
  /**
   * 角色列表
   */
  roles: Role[]
  
  /**
   * 权限列表
   */
  permissions: string[]
}

/**
 * 角色信息
 */
export interface Role {
  /**
   * 角色ID
   */
  id: string | number
  
  /**
   * 角色编码
   */
  code: string
  
  /**
   * 角色名称
   */
  name: string
  
  /**
   * 角色描述
   */
  description?: string
  
  /**
   * 角色状态：0-禁用，1-启用
   */
  status: 0 | 1
  
  /**
   * 创建时间
   */
  createTime?: string
  
  /**
   * 更新时间
   */
  updateTime?: string
}

/**
 * 权限信息
 */
export interface Permission {
  /**
   * 权限ID
   */
  id: string | number
  
  /**
   * 权限编码
   */
  code: string
  
  /**
   * 权限名称
   */
  name: string
  
  /**
   * 权限类型：1-菜单，2-按钮，3-接口
   */
  type: 1 | 2 | 3
  
  /**
   * 权限描述
   */
  description?: string
  
  /**
   * 父级权限ID
   */
  parentId?: string | number
  
  /**
   * 权限路径（菜单路由或API路径）
   */
  path?: string
  
  /**
   * 菜单组件路径
   */
  component?: string
  
  /**
   * 菜单图标
   */
  icon?: string
  
  /**
   * 排序
   */
  sort?: number
  
  /**
   * 是否隐藏：0-显示，1-隐藏
   */
  hidden?: 0 | 1
  
  /**
   * 权限状态：0-禁用，1-启用
   */
  status: 0 | 1
  
  /**
   * 创建时间
   */
  createTime?: string
  
  /**
   * 更新时间
   */
  updateTime?: string
  
  /**
   * 子权限列表
   */
  children?: Permission[]
}

/**
 * 用户设置
 */
export interface UserSettings {
  /**
   * 主题：light-浅色，dark-深色，auto-跟随系统
   */
  theme: 'light' | 'dark' | 'auto'
  
  /**
   * 语言
   */
  language: string
  
  /**
   * 主色调
   */
  primaryColor?: string
  
  /**
   * 布局方式：side-侧边栏，top-顶部导航，mix-混合
   */
  layout: 'side' | 'top' | 'mix'
  
  /**
   * 内容区域宽度：fixed-固定宽度，fluid-流式宽度
   */
  contentWidth: 'fixed' | 'fluid'
  
  /**
   * 是否固定头部
   */
  fixedHeader: boolean
  
  /**
   * 是否固定侧边栏
   */
  fixedSidebar: boolean
  
  /**
   * 是否显示标签页
   */
  showTabs: boolean
  
  /**
   * 是否显示面包屑
   */
  showBreadcrumb: boolean
  
  /**
   * 是否显示页脚
   */
  showFooter: boolean
  
  /**
   * 菜单折叠状态
   */
  collapsed: boolean
  
  /**
   * 通知设置
   */
  notifications: {
    /**
     * 是否接收系统通知
     */
    system: boolean
    
    /**
     * 是否接收活动通知
     */
    activity: boolean
    
    /**
     * 是否接收消息通知
     */
    message: boolean
  }
}

/**
 * 用户地址
 */
export interface UserAddress {
  /**
   * 地址ID
   */
  id: string | number
  
  /**
   * 用户ID
   */
  userId: string | number
  
  /**
   * 收件人姓名
   */
  name: string
  
  /**
   * 手机号
   */
  phone: string
  
  /**
   * 省份
   */
  province: string
  
  /**
   * 城市
   */
  city: string
  
  /**
   * 区/县
   */
  district: string
  
  /**
   * 详细地址
   */
  address: string
  
  /**
   * 邮政编码
   */
  zipCode?: string
  
  /**
   * 是否默认地址
   */
  isDefault: boolean
  
  /**
   * 标签：home-家，company-公司，school-学校，other-其他
   */
  tag?: 'home' | 'company' | 'school' | 'other'
  
  /**
   * 创建时间
   */
  createTime?: string
  
  /**
   * 更新时间
   */
  updateTime?: string
}

/**
 * 用户认证状态
 */
export interface UserAuthState {
  /**
   * 是否已登录
   */
  isLoggedIn: boolean
  
  /**
   * 访问令牌
   */
  accessToken?: string
  
  /**
   * 刷新令牌
   */
  refreshToken?: string
  
  /**
   * 令牌类型
   */
  tokenType?: string
  
  /**
   * 过期时间
   */
  expiresAt?: number
  
  /**
   * 用户信息
   */
  userInfo?: UserInfo
}